Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document pitfall with custom marshal/unmarshal implementations #329

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

andrewmains12
Copy link

I ran into what felt like a "gotcha" around custom marshal/unmarshal behavior today where easyjson continued generating
MarshalEasyJSON and UnmarshalEasyJSON methods for my types even though I had defined them on my struct already, resulting in
method redeclaration errors:

./foo_easyjson.go:13:6: method redeclared: MyStruct.MarshalEasyJSON
	method(*MyStruct) func(*jwriter.Writer)
	method(MyStruct) func(*jwriter.Writer)
./foo_easyjson.go:14:20: (*MyStruct).UnmarshalEasyJSON redeclared in this block
	previous declaration at ./foo.go:16:6

These were confusing to me, as I assumed that easyjson would check if the methods existed already before generating them.

Once I thought it through, it was simple enough to work around with an //easyjson:skip; I documented that approach to hopefully save others (including future me ;)) time.

There's probably a fix that could be applied within the code itself (i.e. don't generate if the method's defined), but I figure this is a quick fix.

I ran into what felt like a "gotcha" around custom marshal/unmarshal behavior today where `easyjson` continued generating
MarshalEasyJSON and UnmarshalEasyJSON methods for my types even though I had defined them on my struct already, resulting in
method redeclaration errors:

```
./foo_easyjson.go:13:6: method redeclared: MyStruct.MarshalEasyJSON
	method(*MyStruct) func(*jwriter.Writer)
	method(MyStruct) func(*jwriter.Writer)
./foo_easyjson.go:14:20: (*MyStruct).UnmarshalEasyJSON redeclared in this block
	previous declaration at ./foo.go:16:6
```

These were confusing to me, as I assumed that `easyjson` would check if the methods existed already before generating them.

Once I thought it through, it was simple enough to work around with an //easyjson:skip; I documented that approach to hopefully save others (including future me ;)) time.

There's probably a fix that could be applied within the code itself (i.e. don't generate if the method's defined), but I figure this is a quick fix.
@andrewmains12
Copy link
Author

Btw I didn't see any contribution guides, but please feel free to point me to one as needed!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant